home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / amok_lha / amok22.lha / MakeKickRes / MakeKickRes.dok < prev    next >
Text File  |  1993-08-15  |  4KB  |  87 lines

  1.  
  2.     MAKEKICKRES  -- CHAIN YOUR PROGRAMS TO EXEC
  3.     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4.  
  5.     von Holger Gzella
  6.  
  7.         Freischöffenweg 12
  8.         4600 Dortmund 16
  9.         (0231) 85 16 02
  10.  
  11.  
  12. Das Programm MakeKickRes ist eigentlich nur ein Demoprogramm zum Text
  13. "ResetFest.dok", denn ein Programm sagt bekanntlich mehr als tausend
  14. Textfiles. Zu beachten ist, wenn man das Programm neu kompilieren will:
  15. es läuft leider nicht mit dem Standard-Exec-Definitionsmodul des M2Amiga-
  16. Compilers v3.2d. Dieses ist nämlich an mindestens zwei Stellen fehler-
  17. haft. Ich habe eine gepatchte Version (als .sym und .def) beigefügt,
  18. die man dann in sein Modul-Verzeichnis kopieren sollte. Die zwei Fehler sin:
  19.  
  20.     1. execBase^.kickCheckSum ist als ADDRESS definiert. Das ist so
  21.        falsch, da dort kein Zeiger auf die KickResident-Checksumme
  22.        steht, sondern die Checksumme selbst. Ich habe dies auf LONG-
  23.        INT geändert, der zwar kompatibel, aber halt doch die dersel-
  24.        be ist. Mit dieser Definition läuft alles glatt.
  25.  
  26.     2. SumKickData(); ist parameterlos definiert. In Wahrheit aber
  27.        wird die Checksumme in D0 übergeben, und der Programmierer
  28.        muß sie selbst eintragen. Also habe ich einen Rückgabewert
  29.        vom Typ LONGINT definiert, der dann prima ins neue kickCheckSum-
  30.        Feld paßt.
  31.  
  32.     3. (Dies habe ich, Fridtjof, hinzugefügt) Die Prozeduren AddIntServer
  33.        und RemIntServer haben seit M2Amiga 3.2 als Typ für den ersten
  34.        Parameter Hardware.IntFlags, was vom Compiler als ein Byte-Wert
  35.        übersetzt wird. Dies führt zu übelsten Abstürzen, da es ein Wort
  36.        sein müßte. Daher hab' ich es durch INTEGER ersetzt.
  37.  
  38. Zum Programm selbst: MakeKickRes kann man sowohl vom CLI/SHELL als auch
  39. von der Workbench starten. Es erscheint dann ein kleines Fenster mit
  40. vier Gadgets. Das oberste, ein String-Gadget, ist dazu da, um den Namen
  41. des Programms, das resetfest gemacht werden soll, einzutragen.
  42.  
  43. Das zweite Gadget, "INFO", gibt Auskunft über das Programm.
  44.  
  45. Das dritte Gadget, "INSTALL IT", installiert das im ersten Gadget ange-
  46. gebene Programm resetfest über KickMemPtr und KickTagPtr. Es muß sich
  47. dabei entweder um ein Object-File ("LINKABLE"-Schalter im DevPac), also
  48. ein assembliertes, aber nicht gelinktes und unausführbares Programm, oder
  49. um ganz normalen, ausführbaren Code ("AUSFÜHRBAR"-Schalter im DevPac; bei
  50. Profimat automatisch) handeln. Wichtig ist nur, daß PC-relativ assem-
  51. bliert wird, da man ja nicht weiß, wo das Programm hinkommt. Theoretisch
  52. wäre es möglich, das Programm in den freien RAM-Bereich bei $50000 zu
  53. legen, aber der wird schon von vielen Programmen (z.B. Observer) genutzt.
  54.  
  55. Mit dem vierten Gadget, das mit "EXIT" bezeichnet ist, verläßt man das
  56. Programm.
  57.  
  58.  
  59. Das war's, viel Spaß noch,
  60.  
  61.  
  62.         Holger
  63.  
  64.  
  65. PS: (von Fridtjof)
  66.  
  67.   Ich halte es nicht für Empfehlenswert, eine verändertes Exec.def zu
  68.   benutzen, da dies zu Inkompatibilitäten beim Compiliren von Programmen
  69.   mit dem Original Exec führen kann. Daher sollte es den M2Amiga
  70.   herstellern vorbehalten bleiben, fehlerfreie Module herauszugeben, die
  71.   dann alle benutzen. Die Fehler oben können folgendermaßen umgangen
  72.   werden:
  73.  
  74.       1. ADDRESS und LONGINT sind kompatible (s.o.) ==> Null Problemo
  75.  
  76.       2. Das Ergebnis der Prozedur kann direkt nach ihrem Aufruf mit
  77.          SYSTEM.REG(0) ausgelesen werden
  78.  
  79.       3. Vor dem Aufruf von Add/RemIntSever kann D0 mit SYSTEM.SETREG(0,0)
  80.          auf 0 gesetzt werden. Wird nun der Byte-Wert des Interrupttyps in
  81.          D0 geschrieben, so ist er automatisch auch als Wort korrekt.
  82.  
  83.   Vielen Dank an Stefan Salewski für die Beschreibung des Fehlers # 3.
  84.  
  85. --- Fridtjof
  86.  
  87.